﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BLL.IServiceImplementation;
using BLL.DTO.Propiedad;
using BLL.DTO.HelperDTO.Pagination;
using DAL.DataSourceInterface;
using DAL;
using BLL.Mappers;
using BLL.DTO.HelperDTO.Propiedad;
using DAL.Entities;

namespace BLL.ServiceImplementation
{
    public class PropiedadSvcImpl : IPropiedadSvc
    {
        private readonly IPropiedadDAO getPropiedadDAO;

        public PropiedadSvcImpl()
        {
            getPropiedadDAO = DataAccess.GetPropiedadDAO;
        }

        public List<PropiedadInfoDTO> GetMisPropiedades(PropiedadFilterDTO filter, PageRequestDTO pageRequest)
        {
            int total;
            List<PropiedadInfoDTO> listaPropiedades = PropiedadMapper.ToInfoDTO(getPropiedadDAO.GetMisPropiedades(filter.RutUsuario, filter.TipoPersona, pageRequest.PageIndex, pageRequest.PageSize, out total));
            return listaPropiedades;
        }

        //Método para mostrar de forma páginada
        public PageList<PropiedadDTO> GetPropiedades(PropiedadFilterDTO filter, PageRequestDTO pageRequest)
        {
            List<PropiedadDTO> propiedadDTO = new List<PropiedadDTO>();
            int total;

            propiedadDTO = PropiedadMapper.ToDTO(getPropiedadDAO.GetMisPropiedades(filter.RutUsuario, filter.TipoPersona, pageRequest.PageIndex, pageRequest.PageSize, out total));
            return new PageList<PropiedadDTO>(propiedadDTO, pageRequest, total);
        }

        public void CreatePropiedadTerreno(PropiedadDTO propiedadDTO, TerrenoDTO terrenoDTO)
        {
            Propiedad propiedadEntity = PropiedadMapper.ToEntity(propiedadDTO);
            Terreno terrenoEntity = TerrenoMapper.ToEntity(terrenoDTO);

            getPropiedadDAO.CreatePropiedadTerreno(propiedadEntity, terrenoEntity);
        }

        public void CreatePropiedadOficina(PropiedadDTO propiedadDTO, OficinaDTO oficinaDTO)
        {
            Propiedad propiedadEntity = PropiedadMapper.ToEntity(propiedadDTO);
            Oficina oficinaEntity = OficinaMapper.ToEntity(oficinaDTO);

            getPropiedadDAO.CreatePropiedadOficina(propiedadEntity, oficinaEntity);
        }

        public void CreatePropiedadDepartamento(PropiedadDTO propiedadDTO, DepartamentoDTO departamentoDTO)
        {
            Propiedad propiedadEntity = PropiedadMapper.ToEntity(propiedadDTO);
            Departamento departamentoEntity = DepartamentoMapper.ToEntity(departamentoDTO);

            getPropiedadDAO.CreatePropiedadDepartamento(propiedadEntity, departamentoEntity);
        }

        public void CreatePropiedadCasa(PropiedadDTO propiedadDTO, CasaDTO casaDTO)
        {
            Propiedad propiedadEntity = PropiedadMapper.ToEntity(propiedadDTO);
            Casa casaEntity = CasaMapper.ToEntity(casaDTO);

            getPropiedadDAO.CreatePropiedadCasa(propiedadEntity, casaEntity);
        }
    }
}
